package com.yf.springboot.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class HelloSchedule {
    /**
     * 1、quartz支持七位cron表达式，最后一位为年，而springboot只支持6位。6位的cron表达式兼容性较强
     * 2、在周的位置1-7表示周一至周日,也可以用MON-SUN表示周几，天/月与周/月必须有一个为?
     * 3、springboot默认的定时任务是串行的，并发执行定时任务方法如下：
     *      3.1 以CompletableFuture异步运行定时任务中的业务代码
     *      3.2 设置TaskSchedulingProperties配置类（默认为一个线程），或者application.properties中配置
     *      spring.task.scheduling.size=5（在有些版本中不好使）
     *      3.3 开启异步任务@EnableAsync, 自定义线程池， @Async标注定时任务方法，让定时任务异步执行
     *
     * 最简解决方案：使用定时任务+异步任务来实现定时任务不阻塞的功能;
     */
    @Scheduled(cron = "*/3 * * * * ?")
    public void hello() {
        log.info("hello spring schedule task");
    }
}
